<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" />
<title></title>
<style type="text/css">

/*
:Author: Your Name
:Contact: Your Email Address
:Copyright: This stylesheet has been placed in the public domain.

Stylesheet for use with Docutils.  
  background-color: #efefef }
*/

@import url(html4css1.css);

/* Your customizations go here.  For example: */

pre.literal-block, pre.doctest-block {
  margin-left: 2em ;
  margin-right: 2em ;
  background-color: #efefef ;
  font-weight: bold ;
  font-size: 12pt ;
  font-family: monospace }
tt.docutils {
  background-color: #e0e0ff ;
  font-weight: bold ;
  font-size: 10pt }


</style>
</head>
<body>
<div class="document">


<div class="section" id="eulix-a-versatile-numerical-ode-solver-of-maxima">
<h1>Eulix - a versatile numerical ODE solver of Maxima</h1>
<div class="section" id="properties">
<h2>Properties</h2>
<p>Eulix is an extrapolated, linearly implicit (by default) Euler method.
It can approximate the solution of an initial value problem
for a system of ordinary differential equations or for
differential algebraic equations (DAEs) of index 1.
More generally, it can solve an implicit system like  M y'(t)= f(t,y)
where M is a constant mass matrix.</p>
<p>It uses variable step sizes and variable orders.
It offers dense output and root finding, i.e., an implicitly defined
final time. Furthermore, it can deliver an accurate spline approximation
of the solution.</p>
<p>The linearly implicit version is  A-stable up to order 2  and
A(alpha) stable with alpha &gt;= 89.81 up to order 8 and probably above,
where A-stable = A(alpha)-stable with alpha = 90 degrees</p>
<p><cite>Eulix</cite> is written in <cite>pure Maxima</cite> and all of its coefficients are
rational numbers. Therefore, it can approximate the solution to arbitrary
precision if <strong>fpprec</strong> is set sufficiently high <strong>and</strong> if all floating point
constants in the right-hand-sides and in the initial values are specified as
<cite>bfloat</cite> constants.</p>
</div>
<div class="section" id="credits">
<h2>Credits</h2>
<p>An essential part of <cite>Eulix</cite> consists of a simplified version of the FORTRAN code SEULEX which has been
publishd in:</p>
<pre class="literal-block">
E. Hairer, G.Wanner
Solving Ordinary Differential Equations II
Stiff and Differential-Algebraic Problems
Springer 1991
</pre>
</div>
<div class="section" id="features">
<h2>Features</h2>
<p><cite>Eulix</cite> offers four APIs - one high level one (<cite>Eulix</cite>) which is an extension of the
interface provided by <cite>rk</cite> and <cite>rkf45</cite>,
and two intermediate level interfaces, <a class="reference internal" href="#eulix-table">Eulix_Table</a> and <a class="reference internal" href="#eulix-spline">Eulix_Spline</a>.
Lastly, there is a low-level interface <a class="reference internal" href="#eulix-step">Eulix_Step</a> which computes a single time step.
<br/> All four interfaces allow for a number of options, see the chapter on <a class="reference internal" href="#options">Options</a> below.</p>
<p><strong>Eulix</strong></p>
<p><cite>Eulix</cite> is called as:</p>
<pre class="literal-block">
Eulix(Expressions,Vars,initials,range,[options])
</pre>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">Expressions:</th><td class="field-body"><p class="first">is a list of expressions (or a single expression)
which give the r.h.s of the ODE system. <br/>
As a special case there might be
an equation with r.h.s. or l.h.s equal to 0 to designate an algebraic equation.</p>
</td>
</tr>
<tr class="field"><th class="field-name">Vars:</th><td class="field-body"><p class="first">is a list of (dependent) variables which occur in these <cite>expressions</cite>.
For each variable there has to be an initial value specified by the list <cite>initials</cite>.</p>
</td>
</tr>
<tr class="field"><th class="field-name">initials:</th><td class="field-body"><p class="first">initial values for each of the independent variables.</p>
</td>
</tr>
<tr class="field"><th class="field-name">range:</th><td class="field-body"><p class="first">is a list of 3 to 5 elements.</p>
<table class="last docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name"><tt class="docutils literal">range[1]</tt>:</th><td class="field-body">specifies the independent variable which will be called <cite>time</cite>
in the following.</td>
</tr>
<tr class="field"><th class="field-name"><tt class="docutils literal">range[2]</tt>:</th><td class="field-body">and <tt class="docutils literal">range[3]</tt> specify the initial and final time, respectively. If <tt class="docutils literal">range[3]</tt> &lt; <tt class="docutils literal">range[2]</tt>
the ODE is integrated <strong>backwards</strong> in time.</td>
</tr>
<tr class="field"><th class="field-name"><tt class="docutils literal">range[4]</tt>:</th><td class="field-body">is called <tt class="docutils literal">delta_t</tt> (if present). Depending on an option
given below, this determines the exact or maximum distance of time values in the
list of results which <cite>Eulix</cite> returns. If <tt class="docutils literal">delta_t=0</tt> only the
natural time steps are returned.</td>
</tr>
<tr class="field"><th class="field-name"><tt class="docutils literal">range[5]</tt>:</th><td class="field-body">is a single  <cite>root condition</cite> or a list of <cite>root conditions</cite> (if present).
<br/> A <cite>root condition</cite> is a real-valued expression which depends on the dependent variables
(see <cite>Vars</cite>) as well as on the independent variable <tt class="docutils literal">range[1]</tt>.
The integration stops if either one of the <cite>root conditions</cite> evaluates to zero
or if the final time <tt class="docutils literal">range[3]</tt> is reached.</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><cite>Eulix</cite> has four different return values.</p>
<p>If there are <strong>no</strong> <cite>root conditions</cite>, <cite>Eulix</cite> returns a list of lists. Each of these
lists consist of a time value and the values of the dependent variables at this
point of time - except if the option <tt class="docutils literal">tabular=none</tt> (see <a class="reference internal" href="#options">Options</a> below).
<br/> If the option <cite>combined_t_y_list=false</cite> is given, <cite>Eulix</cite>
returns a list of two lists, the first of which is a list of time values, the second
of which is a list of lists of the values of the dependent variables at the corresponding times.</p>
<p>If there <strong>are</strong> <cite>root conditions</cite>, <cite>Eulix</cite> returns a list of a <cite>solution list</cite>
and what is returned if there are no <cite>root conditions</cite>.
The <cite>solution list</cite> contains three items: the index of the <cite>root condition</cite> (starting with 1)
which has triggered (i.e. went to zero), the time at which this has happened and
the state (a list of the values of the dependent variables) at this point of time.
<br/> If <cite>root conditions</cite> have been specified but none of which has triggered before
the final time <tt class="docutils literal">range[3]</tt> has been reached, the <cite>solution list</cite> is a list
of three zeros.</p>
<p>In the following we call a matrix with a single column a <cite>vector</cite>.</p>
<p>For the remaining three interfaces you have to specify the right-hand-sides, as well as the root
conditions as vector-valued functiona of two arguments: time and the state vector. Furthermore,
you have to give a vector-valued function which returns the value of the derivative of the
right-hand-side w.r.t. time. In addition, you have to give a Jacobian matrix of the
right-hand-side; this might be an approximation only. The mass-matrix (even if trivial) has to
specified by the option <tt class="docutils literal">mass_matrix</tt> (see <a class="reference internal" href="#options">Options</a> below).</p>
<p id="eulix-table"><strong>Eulix_Table</strong></p>
<p><cite>Eulix_Table</cite> is called as:</p>
<pre class="literal-block">
Eulix_Table(t0,y0,delta_t,t_end,Rhs,Rhs_t,Rhs_jac,Roots,[options])
</pre>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">t0:</th><td class="field-body">initial time</td>
</tr>
<tr class="field"><th class="field-name">y0:</th><td class="field-body">initial state (a <cite>vector</cite>)</td>
</tr>
<tr class="field"><th class="field-name">delta_t:</th><td class="field-body">time increment for the generated list of solutions values. Due to <cite>dense output</cite>
this is independent of the time step used by the integrator. If <cite>delta_t</cite> is zero, only
the natural time steps or even only the final state are output, depending on the
option <tt class="docutils literal">tabular</tt> (see  <a class="reference internal" href="#options">Options</a> below).</td>
</tr>
<tr class="field"><th class="field-name">t_end:</th><td class="field-body">final time. If <tt class="docutils literal">t_end</tt> &lt; <tt class="docutils literal">t0</tt> a negative time step is used. In that case <tt class="docutils literal">delta_t</tt>
must be negative, as well.</td>
</tr>
<tr class="field"><th class="field-name">Rhs:</th><td class="field-body">a vector-valued function of (t,y), where y is the state vector. It defines the right-hand-side
of the ODE system</td>
</tr>
<tr class="field"><th class="field-name">Rhs_t:</th><td class="field-body">a vector-valued function of (t,y), which gives the partial derivative w.r.t. t</td>
</tr>
<tr class="field"><th class="field-name">Rhs_jac:</th><td class="field-body">a matrix-valued function of (t,y), which gives the exact or approximate Jacobian
of the right-hand-side w.r.t. the state vector y</td>
</tr>
<tr class="field"><th class="field-name">Roots:</th><td class="field-body">a list of scalar-valued functions R(t,y). If R(t,y(t))=0 the integration stops</td>
</tr>
<tr class="field"><th class="field-name">options:</th><td class="field-body">see <a class="reference internal" href="#options">Options</a> below</td>
</tr>
<tr class="field"><th class="field-name">Output:</th><td class="field-body">if <cite>Roots</cite> is an empty list, <cite>Eulix_Table</cite> returns a list of two lists,
<tt class="docutils literal">tlist</tt> and <tt class="docutils literal">ylist</tt> which contain the points of time and the state vectors at these times, resp.
- except if the option <tt class="docutils literal">tabular=none</tt>, when only <strong>y_final</strong> is returned.
<br/> if <cite>Roots</cite> is <strong>not</strong> empty, it returns a list <strong>[Solution,[tlist,ylist]]</strong> where
<cite>Solution</cite> is a list of three values: the index of the <cite>root condition</cite> which triggered the event,
the time and state of this event. If none of the <cite>root conditions</cite> has triggered, the first element
of <cite>Solution</cite> is zero - except if the option <tt class="docutils literal">tabular=none</tt> when only <strong>[Solution,y_final]</strong>
is returned</td>
</tr>
</tbody>
</table>
<p id="eulix-spline"><strong>Eulix_Spline</strong></p>
<p><cite>Eulix_Spline</cite> is called as:</p>
<pre class="literal-block">
Eulix_Spline(t0,y0,t_end,Rhs,Rhs_t,Rhs_jac,[options])
</pre>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">parameters:</th><td class="field-body">of the same name are the same as those in <cite>Eulix_Table</cite> above.</td>
</tr>
<tr class="field"><th class="field-name">options:</th><td class="field-body">see <a class="reference internal" href="#options">Options</a> below</td>
</tr>
<tr class="field"><th class="field-name">Output:</th><td class="field-body"><cite>Eulix_Spline</cite> returns a list of objects of struct <tt class="docutils literal">Eulix_Spline_Type</tt>. This is defined as
<br/> <tt class="docutils literal">defstruct(Eulix_Spline_Type(t_left,t_right,NewtonPoly))</tt>
<br/> Each such object defines a polynomial (in <tt class="docutils literal">t</tt>) which represents the solution of the
ODE / DAE in the time interval <tt class="docutils literal">[t_left,t_right]</tt>.
<br/> <cite>Eulix</cite> provides a function &nbsp; <tt class="docutils literal">Eulix_SplineEval(t,Spls)</tt> &nbsp; which evaluates the spline at a point <tt class="docutils literal">t</tt>.
Here, <tt class="docutils literal">Spls</tt> is the list returned by <cite>Eulix_Spline</cite>. It's possible to evaluates the
derivative(s) of this spline w.r.t. time. For this, one should write a function similar to
<cite>Eulix_SplineEval</cite> - see for example the function <cite>Eulix_Dense_Deriv</cite>, below.</td>
</tr>
</tbody>
</table>
<p id="eulix-step"><strong>Eulix_Step</strong></p>
<p><cite>Eulix_Step</cite> is called as:</p>
<pre class="literal-block">
[DO_DQ,tn,hn,me,failed]: Eulix_Step(y,t,Rhs,Rhs_t,Rhs_jac,h,me,[options])
</pre>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">parameters:</th><td class="field-body">of the same name are the same as those in <cite>Eulix_Table</cite> above.</td>
</tr>
<tr class="field"><th class="field-name">h:</th><td class="field-body">step size, which must be non-zero. A negative step size is allowed.
For the very first step the user must estimate a suitable step size.
One might use the technique which is applied by <cite>Eulix_Table</cite> - see
<cite>Automatic selection of the initial step size</cite> in that function.
For any step except the first one, one should supply the value <tt class="docutils literal">hn</tt>
as new step size except for the very last step (to hit a desired final time)</td>
</tr>
<tr class="field"><th class="field-name">me:</th><td class="field-body">width of extrapolation tableau (= order).
For the very first step the user must estimate a suitable initial order,
e.g. 6. For any step except the first one, one should supply the value
<tt class="docutils literal">me</tt> which is returned by <cite>Eulix_Step</cite></td>
</tr>
<tr class="field"><th class="field-name">DO_DQ:</th><td class="field-body">this value depends on the <cite>dense_output</cite> option, see <a class="reference internal" href="#options">Options</a> below.
If this is false, <tt class="docutils literal">DO_DQ[1]</tt> contains the new state vector at time <tt class="docutils literal">tn</tt>.
<br/> Otherwiese <tt class="docutils literal">DO_DQ</tt> contains the dense output information.
This can be passed to
&nbsp; <tt class="docutils literal">Eulix_Dense_Out(dt,DO_DQ)</tt> &nbsp; or &nbsp; <tt class="docutils literal">Eulix_Dense_Deriv(dt,DO_DQ)</tt>.
<br/> Both of these take a time difference <tt class="docutils literal">dt</tt> relative to the
<strong>new</strong> time <tt class="docutils literal">tn</tt>. Therefore, to evaluate the solution
at time <tt class="docutils literal">t1</tt> in <tt class="docutils literal">[t,tn]</tt> with <tt class="docutils literal">tn</tt> &gt; <tt class="docutils literal">t</tt>, the value
<tt class="docutils literal">dt</tt> = <tt class="docutils literal">t1</tt>-<tt class="docutils literal">tn</tt> will be negative. When integrating backwards in time,
i.e., <tt class="docutils literal">tn</tt> &lt; <tt class="docutils literal">t</tt>, this value will be positive.
<br/> <cite>Eulix_Dense_Out</cite> evaluates <tt class="docutils literal">y(t)</tt> while <cite>Eulix_Dense_Deriv</cite>
delivers <tt class="docutils literal"><span class="pre">y'(t)</span></tt>. This can be used in Newton's method as is done in
<cite>Eulix_Table</cite> for determining zeros of the <cite>root conditions</cite>.</td>
</tr>
<tr class="field"><th class="field-name">tn:</th><td class="field-body">is the new time</td>
</tr>
<tr class="field"><th class="field-name">hn:</th><td class="field-body">is the new optimal size for the next step. This should be passed
as parameter <tt class="docutils literal">h</tt> to <cite>Eulix_Step</cite> unless this would exceed the desired
final time.</td>
</tr>
<tr class="field"><th class="field-name">me:</th><td class="field-body">is the new optimal tableau width for the next step. This should be
passed unchanged to <cite>Eulix_Step</cite> for the next call.</td>
</tr>
<tr class="field"><th class="field-name">failed:</th><td class="field-body">If this is <cite>true</cite> the output parameter <cite>DO_DQ</cite> doesn't contain
useful information. <cite>Eulix_Step</cite> had to reject a step more than 10 times
in succession. This should only occur if the right-hand-size is
discontinuous or if the values delivered by <cite>Rhs_t</cite> or <cite>Rhs_jac</cite> are wrong.</td>
</tr>
</tbody>
</table>
<p id="options"><strong>Options</strong></p>
<p>Some options are only applicable to some of the interface functions above.
The following abbreviations are used to indicate for which function an
option is effective: <cite>Eul</cite> for <cite>Eulix</cite>, <cite>Tab</cite> for <cite>Eulix_Table</cite>, <cite>Spl</cite> for
<cite>Eulix_Spline</cite> and <cite>Stp</cite> for <cite>Eulix_Step</cite>.
<br/> The options are given in the form <cite>Option Name</cite> = <cite>default</cite>.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">absolute_tolerance:</th><td class="field-body"><p class="first">= 1E-6 &nbsp; <tt class="docutils literal">[Eul,Tab,Spl,Stp]</tt></p>
</td>
</tr>
<tr class="field"><th class="field-name">relative_tolerance:</th><td class="field-body"><p class="first">= 1E-6 &nbsp; <tt class="docutils literal">[Eul,Tab,Spl,Stp]</tt>
<br/> The (local) <strong>required tolerance</strong> is computed as (with the state vector <tt class="docutils literal">y</tt>):</p>
<pre class="literal-block">
absolute_tolerance + relative_tolerance *  mat_norm(y,'inf)
</pre>
</td>
</tr>
<tr class="field"><th class="field-name">root_tolerance:</th><td class="field-body"><p class="first">= 0 &nbsp; This defines the tolerance for Newton's method to
determine a zero of a <cite>root condition</cite>.
<br/> If this is negative or zero (equivalent to -1E-6), the tolerance is
a relative tolerance according to:</p>
<pre class="literal-block">
abs(root_eps)*max(mat_norm(y_left,'inf),mat_norm(y_right,'inf))
</pre>
<p>Here, <tt class="docutils literal">y_left</tt> and <tt class="docutils literal">y_right</tt> are the state vectors at the left (right, rsp.)
start interval for Newton's method.</p>
</td>
</tr>
<tr class="field"><th class="field-name">maximum_order:</th><td class="field-body"><p class="first">= 20 &nbsp; <tt class="docutils literal">[Stp]</tt> &nbsp; This is the maximum tableau width
that is used by <cite>Eulix_Step</cite></p>
</td>
</tr>
<tr class="field"><th class="field-name">dense_output:</th><td class="field-body"><p class="first">= true &nbsp; <tt class="docutils literal">[Stp]</tt> &nbsp; This makes <cite>Eulix_Step</cite> compute the
dense output information <tt class="docutils literal">DO_DQ</tt>.</p>
</td>
</tr>
<tr class="field"><th class="field-name">work_estimates:</th><td class="field-body"><p class="first">= [1,1,0] &nbsp; <tt class="docutils literal">[Eul,Tab,Spl,Stp]</tt> &nbsp; For computing
the optimal step size and order for the next step, <cite>Eulix_Step</cite> needs
a relative amount of work to evaluate the right-hand-side <cite>Rhs</cite> and
<cite>Rhs_t</cite>,   to compute the Jacobian <cite>Rhs_jac</cite> and to decompose the Jacobian
into a <cite>Q-R-decomposition</cite>.</p>
</td>
</tr>
<tr class="field"><th class="field-name">check_parameters:</th><td class="field-body"><p class="first">= true &nbsp; <tt class="docutils literal">[Tab,Spl,Stp]</tt> &nbsp; If this is true,
several checks to the parameters are performed. The functions
<tt class="docutils literal">Eulix_Table</tt> and <tt class="docutils literal">Eulix_Spline</tt> set this to false after the first
call to <tt class="docutils literal">Eulix_Step</tt>.</p>
</td>
</tr>
<tr class="field"><th class="field-name">mass_matrix:</th><td class="field-body"><p class="first">= <tt class="docutils literal">ident(dim)</tt> &nbsp; This parameter should take a matrix
of the size of the differential system or <tt class="docutils literal">false</tt>.
<br/> If it has the value <tt class="docutils literal">false</tt>, an extrapolated <strong>explicit</strong> Euler scheme
is used. In this case, the function <cite>Rhs_jac</cite> will not be called.
<br/> If it has the value of a (square) matrix <tt class="docutils literal">M</tt>, the (possibly)
implicit ODE &nbsp; <tt class="docutils literal">M <span class="pre">y'(t)</span> = f(t,y(t))</tt> &nbsp; is solved. This matrix need not
be regular. Indeed, for an algebraic equation, the corressponding row of
<tt class="docutils literal">M</tt> should be zero.
<br/> If <cite>mass_matrix</cite> has the value of a matrix, the <strong>implicit</strong> (extrapolated)
Euler scheme will be used.</p>
</td>
</tr>
<tr class="field"><th class="field-name">initial_step_size:</th><td class="field-body"><p class="first">= 0`` &nbsp; <tt class="docutils literal">[Eul,Tab,Spl]</tt> defines
the very first step size; for integration backwards in time, this should
have a negative value. If it has the (default) value 0, an estimate
is computed. This depends on the right-hand-side as well as on the option
<tt class="docutils literal">absolute_tolerance</tt> - see
<cite>Automatic selection of the initial step size</cite> in that function <cite>Eulix_Step</cite>.</p>
</td>
</tr>
<tr class="field"><th class="field-name">initial_order:</th><td class="field-body"><p class="first">= 6 &nbsp; <tt class="docutils literal">[Eul,Tab,Spl]</tt> defines the initial width of the extrapolation
tableau.</p>
</td>
</tr>
<tr class="field"><th class="field-name">logging:</th><td class="field-body"><p class="first">= <tt class="docutils literal">false</tt> &nbsp; <tt class="docutils literal">[Tab,Spl,Stp]</tt> &nbsp; If this is true,
some internal information is printed, e.g. rejected steps, the initial
step size, options which are in effect and for each time step the values
of the current time, step size and tableau width (order).</p>
</td>
</tr>
<tr class="field"><th class="field-name">tabular:</th><td class="field-body"><p class="first">= <tt class="docutils literal">all</tt> &nbsp; <tt class="docutils literal">[Tab]</tt> &nbsp; This option can have the values
<tt class="docutils literal">all</tt> (default), <tt class="docutils literal">none</tt> and <tt class="docutils literal">tabular</tt>.
<br/> If it has the value <tt class="docutils literal">none</tt>, only the final state is returned
or a list <strong>[Solution,y_final]</strong> when <cite>root conditions</cite> have been specified.
<br/> If it has the value <tt class="docutils literal">tabular</tt> a list of solutions at <strong>equidistant</strong> times
is produced. For the value <tt class="docutils literal">all</tt>, the natural time steps are intermixed, as well.</p>
</td>
</tr>
<tr class="field"><th class="field-name">combined_t_y_list:</th><td class="field-body"><p class="first last">= <tt class="docutils literal">true</tt> &nbsp; <tt class="docutils literal">[Eul]</tt> &nbsp; If this is true,
<cite>Eulix</cite> returns a <strong>single list</strong> of lists containing the time value and the
corresponding solution components at this point of time.
<br/> If this is false, <cite>Eulix</cite> returns &nbsp; <tt class="docutils literal">[tlist,ylist]</tt> &nbsp;, where
<tt class="docutils literal">ylist</tt> is a list of lists containing the solution components at the
corresponding time in <tt class="docutils literal">tlist</tt>.</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="examples">
<h2>Examples</h2>
<p>The example files are all named <tt class="docutils literal"><span class="pre">Eulix_*.mac</span></tt>. In the following list, we only
give the suffix which the star stands for.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">T1:</th><td class="field-body">This is a simple 1-d ODE which requires frequent changes of the step size
and order. It's partially stiff. The exact solution is known.</td>
</tr>
<tr class="field"><th class="field-name">T1R:</th><td class="field-body">This solves the same ODE <strong>backwards</strong> in time</td>
</tr>
<tr class="field"><th class="field-name">Step_T1:</th><td class="field-body">This solves the same ODE using the low level <cite>Eulix_Step</cite> interface</td>
</tr>
<tr class="field"><th class="field-name">T2:</th><td class="field-body">This is a simple 1-d ODE which simulates arbitrary stiffness.
The exact solution is known.</td>
</tr>
<tr class="field"><th class="field-name">T3:</th><td class="field-body">This is the Volterra-Lotka (2-d) system which is rather demanding.</td>
</tr>
<tr class="field"><th class="field-name">T3N:</th><td class="field-body">This demonstrates the option <tt class="docutils literal">tabular=none</tt> for the same ODE</td>
</tr>
<tr class="field"><th class="field-name">Spline_T3:</th><td class="field-body">This demonstrates the <cite>Eulix_Spline</cite> interface for this ODE</td>
</tr>
<tr class="field"><th class="field-name">T4:</th><td class="field-body">Here we solve a differential-algebraic equation (DAE) for a pendulum</td>
</tr>
<tr class="field"><th class="field-name">T5:</th><td class="field-body">This is a rather demanding AIDS model which requires a good error estimator.
Here we demonstrate the <cite>root finding</cite> feature.</td>
</tr>
<tr class="field"><th class="field-name">T5N:</th><td class="field-body">Same as above except with <tt class="docutils literal">tabular=none</tt></td>
</tr>
<tr class="field"><th class="field-name">Table_T5:</th><td class="field-body">This same model as <tt class="docutils literal">T5</tt> but this time using the <cite>Eulix_Table</cite>
interface. Here we demonstrate the <cite>root finding</cite> feature.</td>
</tr>
<tr class="field"><th class="field-name">TP:</th><td class="field-body">Here we solve a system of 2 equations with a tolerance of 1E-30.
Since the exact solution is known, we can check the tolerance achieved.</td>
</tr>
<tr class="field"><th class="field-name">TS:</th><td class="field-body">This is an extremely stiff ODE (<cite>Shampine's ball of flame</cite>)</td>
</tr>
<tr class="field"><th class="field-name">Step_TP:</th><td class="field-body">A 2-d ODE with a known solution, demonstrating high precision
solving using the low level <cite>Eulix_Step</cite> interface.</td>
</tr>
<tr class="field"><th class="field-name">Table_TC:</th><td class="field-body">A very stiff system modelling a chemical reaction using the <cite>Eulix_Table</cite> interface,
see Hairer/Wanner Solving ODE II .</td>
</tr>
</tbody>
</table>
<p>The examples <cite>Eulix_T1.mac</cite>, <cite>Eulix_T2.mac</cite>, <cite>Eulix_T3.mac</cite> and <cite>Eulix_TS.mac</cite>
contain comparisons with <cite>rkf45</cite>.</p>
</div>
</div>
</div>
</body>
</html>
